package com.meituan.sqt.model.order.orig;

import lombok.Data;

import java.util.List;

/**
 * @author: chenbocheng02@meituan.com
 * @date: 2022/2/10 8:12 下午
 * @description:
 */
@Data
public class TrainOrderInfo {
    /**
     * 订单基本信息
     */
    private TrainOrderBaseInfo trainOrderBase;
    /**
     * 抢票信息
     */
    private GrabInfo grabInfo;
    /**
     * 票详细信息
     */
    private List<TicketInfo> ticketInfoList;

    @Data
    public static class TrainOrderBaseInfo {
        /**
         * 12306订单号
         */
        private String orderId12306;
        /**
         * 出发车站三字码
         */
        private String fromStationCode;
        /**
         * 出发车站名称
         */
        private String fromStationName;
        /**
         * 发车行政区名称,存在极少获取不到的情况
         */
        private String fromLocationName;
        /**
         * 到达车站三字码
         */
        private String toStationCode;
        /**
         * 到达车站名称
         */
        private String toStationName;
        /**
         * 到达行政区名称,存在极少获取不到的情况
         */
        private String toLocationName;
        /**
         * 联系人手机号
         */
        private String contactPhone;
        /**
         * 支付时间：13位时间戳
         */
        private Long payTime;
        /**
         * 订单原始金额，单位分
         */
        private long orderAmount;
        /**
         * 业务订单状态码
         */
        private Integer orderStatus;
        /**
         * 订单状态名称
         */
        private String orderStatusName;
        /**
         * 创建时间
         */
        private Long createTime;
        /**
         * 最新更新时间
         */
        private Long latestUpdateTime;
        /**
         * 是否超标 true表示超标
         */
        private boolean isExceeded;
        /**
         * 超标原因
         */
        private String exceededReason;
        /**
         * 行程段
         */
        private String travelRoute;
        /**
         * 退票费(退票的手续费)，单位分
         */
        private Integer totalRefundFee;
        /**
         * 改签原因
         */
        private String changeReason;
        /**
         * 改签备注详情
         */
        private String changeReasonRemark;
        /**
         * 退票原因
         */
        private String refundReason;
        /**
         * 退票备注详情
         */
        private String refundReasonRemark;
        /**
         * 车次是否支持刷身份证进站
         */
        private Boolean supportBrushIdCard;
    }

    @Data
    public static class GrabInfo {
        /**
         * 乘车日期列表
         */
        private List<Long> optionDates;
        /**
         * 坐席类型列表
         */
        private List<String> seatTypes;
        /**
         * 车次列表
         */
        private List<String> trainCodes;
        /**
         * 加速包数量
         */
        private int speedUpPackageNum;
        /**
         * 加速包价格（单位：分）
         */
        private long speedUpPackagePrice;
        /**
         * 抢票状态码
         */
        private Integer qOrderStatusCode;
        /**
         * 抢票状态名称
         */
        private String qOrderStatusName;
        /**
         * 抢票结束时间,13位时间戳
         */
        private Long qEndTime;
    }

    @Data
    public static class TicketInfo {
        /**
         * 乘车人姓名
         */
        private String passengerName;
        /**
         * 乘车人证件编号
         */
        private String passengerIdCardNo;
        /**
         * 乘车人证件类型,目前只有身份证
         */
        private String passengerIdCardTypeName;
        /**
         * 最新的车票信息
         */
        private TicketDetail currentTicket;
        /**
         * 改签前的车票信息
         */
        private TicketDetail oldTicket;
        /**
         * 待打印状态
         */
        private String printStatusDesc;
    }

    @Data
    public static class TicketDetail {
        /**
         * 车次编号
         */
        private String trainCode;
        /**
         * 发车站三字码
         */
        private String fromStationCode;
        /**
         * 发车站名称
         */
        private String fromStationName;
        /**
         * 目的站三字码
         */
        private String toStationCode;
        /**
         * 目的站名称
         */
        private String toStationName;
        /**
         * 发车时间,13位时间戳
         */
        private Long startTime;
        /**
         * 到站时间,13位时间戳
         */
        private Long arriveTime;
        /**
         * 运行时长（单位：分钟）
         */
        private Integer runTime;
        /**
         * 票状态码
         */
        private Integer statusCode;
        /**
         * 票状态名称
         */
        private String statusName;
        /**
         * 火车票类型
         */
        private Integer ticketTypeCode;
        /**
         * 火车票类型名称
         */
        private String ticketTypeName;
        /**
         * 车厢号
         */
        private String coachNo;
        /**
         * 座位号
         */
        private String seatNo;
        /**
         * 座位类型
         */
        private Integer seatTypeCode;
        /**
         * 座位类型名称
         */
        private String seatTypeName;
        /**
         * 实际票价格（单位：分）
         */
        private long ticketPrice;
    }
}
